/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Mensajes;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.ws.BindingProvider;

import Persistencia.conexionBD;
import com.systelab.modulabgold.server.webservice.request.*;

/**
 *
 * @author Administrador
 */
public class Orden {

	private int idOrden;
	private int OsId;
	private int IndicId;
	private String EstudioId;
	private String oidDocumento;
	private String NroDocumento;
	private String FechaHora;
	private String msjHl7;

	public Orden() {
	}

	public void setIdOrden(int idOrden) {
		this.idOrden = idOrden;
	}

	public void setOsId(int osId) {
		this.OsId = osId;
	}

	public void setIndicId(int indicId) {
		this.IndicId = indicId;
	}

	public void setEstudioId(String estudioId) {
		this.EstudioId = estudioId;
	}

	public void setOidDocumento(String oidDoc) {
		this.oidDocumento = oidDoc;
	}

	public void setNroDocumento(String documento) {
		this.NroDocumento = documento;
	}

	public void setFechaHora(String fechaHora) {
		this.FechaHora = fechaHora;
	}

	public void setMsjHl7(String hl7) {
		this.msjHl7 = hl7;
	}

	public int getIdOrden() {
		return idOrden;
	}

	public int getOsId() {
		return OsId;
	}

	public int getIndicId() {
		return IndicId;
	}

	public String getEstudioId() {
		return EstudioId;
	}

	public String getOidDocumento() {
		return oidDocumento;
	}

	public String getNroDocumento() {
		return NroDocumento;
	}

	public String getFechaHora() {
		return FechaHora;
	}

	public String getMsjHl7() {
		return msjHl7;
	}

	public static String envioMensajeIZASA(String hl7){
		String NL = "\r";
		String respuesta = "";	
		String medico = "";
		String mensaje = "";
		try {

			//Armo el mensaje para enviar a IZASA, los datos que no tengo los mando como "0"			
			String[] obr = hl7.split("OBR\\|")[1].split("\\|");
			medico = hl7.split("PV1\\|")[1].split("\\|")[6].split("\\^")[1];

			mensaje += "MSH|^~\\&amp;|GEOSALUD|"+hl7.split("\\|")[3]+"|"+hl7.split("\\|")[4]+"|"+hl7.split("\\|")[5]+"|"+hl7.split("\\|")[6]+"||OML^O21|MSG-"+hl7.split("\\|")[6]+"-1|P|2.5|||"+NL;			
			mensaje += "PID|"+hl7.split("PID\\|")[1].split(NL+"PV1\\|")[0].replace("&", " ") + NL;
			mensaje += "PV1||"+hl7.split("PV1\\|")[1].split("\\|")[1]+"|"+hl7.split("PV1\\|")[1].split("\\|")[2]+"||||||||||||||||"+hl7.split("\\|")[9] + NL;
			mensaje += "ORC|"+hl7.split("ORC\\|")[1].split("\\|")[0]+"||||||||"+hl7.split("ORC\\|")[1].split("\\|")[8]+"||||||||||||"+hl7.split("ORC\\|")[1].split("\\|")[20].split(NL+"OBR")[0] + NL;
			mensaje += "OBR|"+obr[0]+"|||"+obr[3].split("\\^")[0]+"||"+obr[5]+"||||0||||||"+medico+"||||||||0||||HCE|";			

			java.net.URL url = new java.net.URL(conexionBD.obtenerParametros("Descripcion = 'urlWSIZASA'").get(0));

			RequestWS_ServiceLocator RequestWS_ServiceLocator = new RequestWS_ServiceLocator();
			RequestWS_PortType wsIZASA= RequestWS_ServiceLocator.getRequestWSSoapHttpPort(url);
			//RequestWS_PortType wsIZASA= RequestWS_ServiceLocator.getRequestWSSoapHttpPort();

			respuesta = wsIZASA.processMessage(mensaje);

			conexionBD.log("EnvioNuevaOrdenIZASA", mensaje, "Envio correcto "+respuesta, Integer.parseInt(hl7.split("\\|")[9]));




		} catch (Exception e) {

			e.printStackTrace();
			conexionBD.log("EnvioNuevaOrdenIZASA", hl7, "Error al enviar", Integer.parseInt(hl7.split("\\|")[9]));
		}

		return respuesta;
	}

	public static String procesarOrden(String hl7){

		String NL = "\r";
		String respuesta = "";	
		String envioIzasa="";
		String validacion="";
		SimpleDateFormat formato = new SimpleDateFormat("yyyyMMddhhmmss");
		String fechaServidor = formato.format(new Date()).toString();
		try {
			validacion = ValidadorEnvioHL7.validarMsj("OML^021", hl7);
			if (validacion.equals("OK")) {

				String[] obr = hl7.split("OBR\\|")[1].split("\\|");

				Orden orden = new Orden();
				orden.setIdOrden(Integer.parseInt(hl7.split("\\|")[9]));
				orden.setOsId(Integer.parseInt(obr[1].split(";")[1]));
				orden.setIndicId(Integer.parseInt(obr[1].split(";")[2]));
				orden.setEstudioId(obr[3].split("\\^")[0]);
				orden.setNroDocumento(hl7.split("PID\\|")[1].split("\\|")[2].split("\\^")[0]);
				orden.setFechaHora(obr[5]);
				orden.setMsjHl7(hl7);

				respuesta = "MSH|^~\\&|GEOSALUD||ADT|" + orden.getIdOrden() + "|" + fechaServidor + "||ACK||P|2.5" + NL;				
				if (conexionBD.obtenerOrden("IDOrden = "+hl7.split("\\|")[9]).size() != 0){	
					respuesta += "MSA|AR|7|El numero de orden ya existe|1";
				} else {				

					//validacion = ValidadorEnvioHL7.validarMsj("OML^021", envioIzasa);
					//Terminar la validacion para izasa					

					if (conexionBD.insertOrden(orden) == 0) {	
						respuesta += "MSA|AR|7|No se pudo insertar en la BD|1";
					} else {
						envioIzasa = envioMensajeIZASA(hl7).split("MSA\\|")[1];
						if(envioIzasa.split("\\|")[0].equals("AA")){							
							respuesta += "MSA|AA|0||1";	
						} else {
							String[] msa =  envioIzasa.split("\\|");
							respuesta += "MSA|"+msa[0]+"|"+msa[1]+"||"+msa[3];								
						}
					}
				}
				conexionBD.log("RespuestaOden", respuesta, "Envio Respuesta", orden.getIdOrden());

			} else {

				conexionBD.log("NuevaOrden", hl7, "Error. falta algun dato", Integer.parseInt(hl7.split("\\|")[9]));
				respuesta = "MSH|^~\\&|GEOSALUD||ADT|" + hl7.split("\\|")[9] + "|" + fechaServidor + "||ACK||P|2.5" + NL
						+ validacion;

			}	
		} catch (Exception e) {
			e.printStackTrace();
			conexionBD.log("NuevaOrden", hl7, "Error. falta alguna linea", Integer.parseInt(hl7.split("\\|")[9]));
			respuesta = "MSH|^~\\&|GEOSALUD||ADT|" + hl7.split("\\|")[9] + "|" + fechaServidor + "||ACK||P|2.5" + NL
					+ "MSA|AE|99||1";
		}
		return respuesta;
	}
}
